package com.api.baidudemo.navi.sdkdemo.activity;

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.view.View;

import com.api.baidudemo.navi.sdkdemo.EventHandler;
import com.api.baidudemo.navi.sdkdemo.LocationController;
import com.baidu.navisdk.adapter.BNaviCommonParams;
import com.baidu.navisdk.adapter.BaiduNaviManagerFactory;
import com.baidu.navisdk.adapter.IBNRouteGuideManager;

/**
 * 这个神奇的页面 内部会自动定位当前位置为起点
 */
public class DemoExtGpsActivity extends Activity {

    private IBNRouteGuideManager mRouteGuideManager;

    private IBNRouteGuideManager.OnNavigationListener mOnNavigationListener =
            new IBNRouteGuideManager.OnNavigationListener() {

                @Override
                public void onNaviGuideEnd() {
                    // 退出导航
                    finish();
                }

                @Override
                public void notifyOtherAction(int actionType, int arg1, int arg2, Object obj) {
                    if (actionType == 0) {
                        // 导航到达目的地 自动退出
                        BaiduNaviManagerFactory.getRouteGuideManager().forceQuitNaviWithoutDialog();
                    }
                }
            };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        View mapView = BaiduNaviManagerFactory.getRouteGuideManager()
                .onCreate(this, mOnNavigationListener);
        if (mapView != null) {
            setContentView(mapView);
        }

        initExtGpsData();
        routeGuideEvent();
    }

    //横竖屏切换
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mRouteGuideManager.onConfigurationChanged(newConfig);
    }

    /**
     * 定位当前位置为起点
     */
    private void initExtGpsData() {
        // 开启使用外部GPS数据
        BaiduNaviManagerFactory.getBaiduNaviManager().externalLocation(true);
        // 传入外部GPS数据,请尽量按以下方式传入数据参数，缺失数据会影响GPS的准确性，造成定位不准。
// 必须使用WGS84坐标系
        LocationController.getInstance().startLocation(getApplication());//定位当前位置
    }

    // 导航过程事件监听
    private void routeGuideEvent() {
        BaiduNaviManagerFactory.getRouteGuideManager().setRouteGuideEventListener(
                new IBNRouteGuideManager.IRouteGuideEventListener() {
                    @Override
                    public void onCommonEventCall(int what, int arg1, int arg2, Bundle bundle) {
                        EventHandler.getInstance().handleNaviEvent(what, arg1, arg2, bundle);
                    }
                }
        );
    }

    @Override
    public void onBackPressed() {
        mRouteGuideManager.onBackPressed(false, true);
    }

    @Override
    protected void onStart() {
        super.onStart();
        mRouteGuideManager.onStart();
    }

    @Override
    protected void onResume() {
        super.onResume();
        mRouteGuideManager.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        mRouteGuideManager.onPause();
    }

    @Override
    protected void onStop() {
        super.onStop();
        mRouteGuideManager.onStop();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        LocationController.getInstance().stopLocation();
        BaiduNaviManagerFactory.getBaiduNaviManager().externalLocation(false);
    }
}
